package com.itheima.travel.service.impl;

import com.itheima.travel.mapper.UserMapper;
import com.itheima.travel.pojo.User;
import com.itheima.travel.pojo.UserExample;
import com.itheima.travel.req.UserVo;
import com.itheima.travel.service.UserService;
import com.itheima.travel.utils.BeanConv;
import com.itheima.travel.utils.EmptyUtil;
import com.itheima.travel.utils.MD5Coder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.servlet.http.HttpSession;
import java.util.List;

/**
 *
 */

@Service
public class UserServiceImpl implements UserService {
    @Autowired
    private UserMapper userMapper;
    // 用来
    @Autowired
    private HttpSession session;


    @Override
    // 用户注册
    public Boolean registerUser(UserVo userVo) {
        // 参数是Vo而Mapper使用的是User,先进行类型转换
        User user = BeanConv.toBean(userVo, User.class);
        // 对密码进行加密
        user.setPassword(MD5Coder.md5Encode(user.getPassword()));
        // 调用dao层的方法进行数据库的添加
        int i = userMapper.insert(user);
        return i>0;
    }

    @Override
    // 用户登陆
    public UserVo loginUser(UserVo userVo) {
        // 组装条件
        UserExample example = new UserExample();
        example.createCriteria()
                .andUsernameEqualTo(userVo.getUsername())
                .andPasswordEqualTo(MD5Coder.md5Encode(userVo.getPassword()));
        // 查询list结果集,其实值只有一个
        List<User> list = userMapper.selectByExample(example);
        // list集合中的对象是user类型需要转换为UserVo
        List<UserVo> userVos = BeanConv.toBeanList(list, UserVo.class);
        // 判断结果,如果为空说明数据库找不到数据，登陆失败，反之成功
        if (userVos.size()==1){
            // 登陆成功
            // 获取这个对象
            UserVo userVoResult = userVos.get(0);
            // 将其放入会话，作为已经登陆的记录
            // sessionId作为session的键
            String sessionId = session.getId();
            userVoResult.setSessionId(sessionId);
            session.setAttribute(sessionId,userVoResult);
            return userVoResult;
        }
        return null;
    }

    @Override
    // 退出登陆
    public void loginOutUser() {
        // 从会话中删除当前对象
        session.removeAttribute(session.getId());
    }

    @Override
    // 用来判断当前是否有用户登陆
    public Boolean isLogin() {
        Object attribute = session.getAttribute(session.getId());
        // 根据判断当前对象是否为空来判断是否处于登陆状态
        // 为空返回false，不为空返回true，为false说明没有人登陆
        return !EmptyUtil.isNullOrEmpty(attribute);

    }
}
